package com.networkmanagerj.test.dao;

import java.io.Serializable;
import java.util.List;

import org.junit.AfterClass;
import org.junit.BeforeClass;

import br.com.networkmanagerj.exception.exception.GenericPersistenceException;
import br.com.networkmanagerj.persistence.EMFactory;
import br.com.networkmanagerj.persistence.GenericPersistence;
import br.com.networkmanagerj.persistence.IEntity;
import br.com.networkmanagerj.persistence.OrderType;

import com.networkmanagerj.dao.AcaoMensagemDAO;
import com.networkmanagerj.dao.DAOFactory;
import com.networkmanagerj.dao.DAOObject;
import com.networkmanagerj.dao.EquipamentoDAO;
import com.networkmanagerj.dao.EventoAlertaDAO;
import com.networkmanagerj.dao.GrupoUsuarioDAO;
import com.networkmanagerj.dao.LocalFisicoDAO;
import com.networkmanagerj.dao.MensagemDAO;
import com.networkmanagerj.dao.NotificacaoDAO;
import com.networkmanagerj.dao.NotificadoDAO;
import com.networkmanagerj.dao.UsuarioDAO;
import com.networkmanagerj.model.AcaoMensagem;
import com.networkmanagerj.model.Equipamento;
import com.networkmanagerj.model.EventoAlerta;
import com.networkmanagerj.model.GrupoUsuario;
import com.networkmanagerj.model.LocalFisico;
import com.networkmanagerj.model.Mensagem;
import com.networkmanagerj.model.Notificacao;
import com.networkmanagerj.model.Notificado;
import com.networkmanagerj.model.Usuario;

public abstract class DAOHelp {
	protected static String puName = "networkmanagerj";
	protected static DAOFactory daoFactory;
	protected static UsuarioDAO usuarioDao;
	protected static GrupoUsuarioDAO grupoUsuarioDao;
	protected static NotificacaoDAO notificacaoDAO;
	protected static NotificadoDAO notificadoDAO;
	protected static EventoAlertaDAO eventoAlertaDao;
	protected static EquipamentoDAO equipamentoDAO;
	protected static LocalFisicoDAO localFisicoDao;
	protected static MensagemDAO mensagemDao;
	protected static AcaoMensagemDAO acaoMensagemDao;

	@BeforeClass
	public static void start() throws GenericPersistenceException {
		EMFactory.getEntityManagerFactory(puName);
		daoFactory = DAOFactory.getInstance(puName);
		usuarioDao = (UsuarioDAO) daoFactory.createDAO(Usuario.class);
		grupoUsuarioDao = (GrupoUsuarioDAO) daoFactory
				.createDAO(GrupoUsuario.class);
		notificacaoDAO = (NotificacaoDAO) daoFactory
				.createDAO(Notificacao.class);
		notificadoDAO = (NotificadoDAO) daoFactory.createDAO(Notificado.class);
		eventoAlertaDao = (EventoAlertaDAO) daoFactory
				.createDAO(EventoAlerta.class);
		equipamentoDAO = (EquipamentoDAO) daoFactory
				.createDAO(Equipamento.class);
		localFisicoDao = (LocalFisicoDAO) daoFactory
				.createDAO(LocalFisico.class);
		mensagemDao = (MensagemDAO) daoFactory.createDAO(Mensagem.class);
		acaoMensagemDao = (AcaoMensagemDAO) daoFactory
				.createDAO(AcaoMensagem.class);
	}

	@AfterClass
	public static void stop() {
		EMFactory.closeEntityManagerFactory(puName);
	}

	protected void deleteAll(GenericPersistence<IEntity> dao)
			throws GenericPersistenceException {
		List<? extends IEntity> list = dao.search(OrderType.Asc);
		for (IEntity o : list) {
			dao.delete(o);
		}
		list = dao.search(OrderType.Asc);
	}
}
